xend: passthrough: do not check non-page-aligned MMIO BAR if not strict-check
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 16 Oct 2009 07:30:13 +0000 (08:30 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 16 Oct 2009 07:30:13 +0000 (08:30 +0100)
When the option pci-passthrough-strict-check of
/etc/xen/xend-config.sxp is set to 'no', we don't check the
non-page-aligned MMIO BAR.  This could be useful in some cases, e.g.,
when there is only 1 device in the range of the page and we try to
assign the device to pv guest.

Signed-off-by: Dexuan Cui <dexuan.cui@intel.com>
tools/python/xen/xend/XendDomainInfo.py
tools/python/xen/xend/server/pciif.py

index 724c50951eb905163025f7788013d361cb7c6d7f..d4fd6bffb8dddac1b53a5b599e182f438d859d16 100644 (file)
@@ -702,8 +702,9 @@ class XendDomainInfo:
             raise VmError(("pci: PCI Backend and pci-stub don't own device %s")\
                             %pci_device.name)
 
+        strict_check = xoptions.get_pci_dev_assign_strict_check()
         # Check non-page-aligned MMIO BAR.
-        if pci_device.has_non_page_aligned_bar and arch.type != "ia64":
+        if pci_device.has_non_page_aligned_bar and strict_check:
             raise VmError("pci: %s: non-page-aligned MMIO BAR found." % \
                 pci_device.name)
 
@@ -711,7 +712,7 @@ class XendDomainInfo:
         if not self.info.is_hvm():
             return
 
-        if not xoptions.get_pci_dev_assign_strict_check():
+        if not strict_check:
             return
 
         # Check if there is intermediate PCIe switch bewteen the device and
index 3d1f7b27c32b749cf40eed7f37a563d1cc3c5afa..3d544110d6a088c719f7d277c08cddc6c97efc37 100644 (file)
@@ -289,9 +289,6 @@ class PciController(DevController):
             raise VmError(("pci: PCI Backend and pci-stub don't own "+ \
                     "device %s\n") %(dev.name))
 
-        if dev.has_non_page_aligned_bar and arch.type != "ia64":
-            raise VmError("pci: %s: non-page-aligned MMIO BAR found." % dev.name)
-
         self.CheckSiblingDevices(fe_domid, dev)
 
         # We don't do FLR when we create domain and hotplug device into guest,
@@ -368,6 +365,9 @@ class PciController(DevController):
                 raise VmError("pci: failed to locate device and "+
                         "parse its resources - "+str(e))
 
+            if dev.has_non_page_aligned_bar and strict_check:
+                raise VmError("pci: %s: non-page-aligned MMIO BAR found." % dev.name)
+
             # Check if there is intermediate PCIe switch bewteen the device and
             # Root Complex.
             if self.vm.info.is_hvm() and dev.is_behind_switch_lacking_acs() \